
#ifndef _DEFINE_H_
#define _DEFINE_H_

	#define 		TRUE														1
	#define 		FALSE														0
	#define 		ON															1
	#define 		OFF															0
	#define 		ENABLE													1
	#define 		DISABLE													0
	#define 		HIGH_LEVEL											1
	#define 		LOW_LEVEL												0
	
	#define			UP_KEY													0x80																				//上移键
	#define			DOWN_KEY												0x02																				//下移键
	#define			POWER_KEY												0x04																				//电源键
	#define			UP_AND_DOWN_KEY									0x82																				//上下键同时按下
	#define			NO_KEY													0x00																				//无键
	
	#define			NOP()														_nop_()

	#define			SEND_LENGTH_OF_ARRAY 						20																					//发送帧数组长度
	#define			RECEIVE_LENGTH_OF_ARRAY 				14																					//接收帧数组长度
	
	#define			SILENCE_PERIOD									2000																				//设置状态不操作时间，2000*5ms=10000=10秒
//----------------------------------------------------------------------------------------//
//档位定义	
	#define 		THREE_GREA_HELP         					0x03																			//三档助力
	#define 		FIVE_GREA_HELP              			0x05																			//五档助力
	#define 		NINE_GREA_HELP                 		0x09																			//九档助力
	#define			GREA_NUMBER_INDEX									THREE_GREA_HELP														//使用几个档
//----------------------------------------------------------------------------------------//
//发送字节数组位置定义		

	#define			DRIVE_MODE_BYTE_INDEX							0x03																			//发送的第3字节是做驱动方式的
	#define			GREA_SAVE_BYTE_INDEX							0x04																			//发送的第4字节是做档位的
	#define			CONTRLLER_SET_ONE_BYTE_INDEX			0x05																			//发送的第5字节是控制器设定1
	#define			SPEED_MEASURE_MAGNET_BYTE_INDEX		0x06																			//发送的第6字节是测速磁钢数
	#define			WHEEL_DIAMETER_HIGH_BYTE_INDEX		0x07																			//发送的第7字节是轮径值高字节
	#define			WHEEL_DIAMETER_LOW_BYTE_INDEX			0x08																			//发送的第8字节是轮径值低字节
	#define			ASSIST_SENSITIVITY_BYTE_INDEX			0x09																			//发送的第9字节是助力灵敏度
	#define			ASSIST_START_CLASS_BYTE_INDEX			0x0A																			//发送的第10字节是助力启动强度
	#define			INSIDE_SPEED_MEASURE_BYTE_INDEX		0x0B																			//发送的第11字节是内测速磁钢数
	#define			LIMIT_SPEED_BYTE_INDEX						0x0C																			//发送的第12字节为限速值
	#define			CURRENT_VALUE_BYTE_INDEX					0x0D																			//发送的第13字节是保存电流值的
	#define			LOW_VOLTAGE_HIGH_BYTE_INDEX				0x0E																			//发送的第14字节为欠压值高字节
	#define			LOW_VOLTAGE_LOW_BYTE_INDEX				0x0F																			//发送的第15字节为欠压值低字节
	#define			SPEED_HIGH_BYTE_INDEX							0x10																			//发送的第16字节为转把PWM值高字节
	#define			SPEED_LOW_BYTE_INDEX							0x11																			//发送的第17字节为转把PWM值低字节
	#define			CONTRLLER_SET_TWO_BYTE_INDEX			0x12																			//发送的第18字节为控制器设定2+助力磁盘选择
	
//----------------------------------------------------------------------------------------//
//接收字节数组位置定义	
	#define			REC_STATE_ONE_BYTE_INDEX					0X03																			//接收数据的第3个字节是控制器状态1
	#define			REC_STATE_TWO_BYTE_INDEX					0X04																			//接收数据的第4个字节是控制器状态2
	#define			REC_CURRENT_HIGH_BYTE_INDEX				0x05																			//接收数据的第5个字节是电流值高字节，如果高字节的第6位位1单位为0.1A，为0单位为1A，Bit7 预留做正负值
	#define			REC_CURRENT_LOW_BYTE_INDEX				0x06																			//接收数据的第6个字节是电流值低字节
	#define			REC_CURRENT_RATIO_BYTE_INDEX  		0x07																			//接收数据的第7个字节是电流比例值
	#define			REC_SPEED_HIGH_BYTE_INDEX					0x08																			//接收数据的第8个字节是速度反馈高字节，单位为1ms
	#define			REC_SPEED_LOW_BYTE_INDEX					0x09																			//接收数据的第9个字节是速度反馈低字节，表示轮子转一圈的时间，最长不超过30S,如超过30 秒就发30000（相当于30S）
	#define			REC_BAT_CAPACITY_BYTE_INDEX				0x0A																			//接收数据的第10个字节是电池容量，由BMS 实现(没有BMS 时不用实现，发送0)
	#define			REC_RANGE_MILES_HIGH_BYTE_INDEX		0x0B																			//接收数据的第11个字节是剩余里程,高字节，由BMS 实现(没有BMS 时不用实现，发送0)
	#define			REC_RANGE_MILES_LOW_BYTE_INDEX		0x0B																			//接收数据的第12个字节是剩余里程,低字节，由BMS 实现(没有BMS 时不用实现，发送0)
	
//----------------------------------------------------------------------------------------//	
//HT1621
	#define 		LCD_BIAS_1P2 										(0<<1) 																			//1/2偏压
	#define 		LCD_BIAS_1P3 										(1<<1) 																			//1/3偏压																																
	#define 		LCD_USE_COM2 										(0<<3) 																			//使用2个公共口
	#define 		LCD_USE_COM3 										(1<<3) 																			//使用3个公共口
	#define 		LCD_USE_COM4 										(2<<3) 																			//使用4个公共口
	#define 		LCD_CMD_BIAS_COM 								(0x40) 																			//设置公共口和偏压的命令
	#define 		SYSTEM_DISABLE 									0x00 																				//0b1000 0000 0000 关振系统荡器和LCD偏压发生器
	#define 		SYSTEM_ENABLE 									0x02 																				//0b1000 0000 0010 打开系统振荡器
	#define 		LCD_DISPLAY_OFF 								0x04 																				//0b1000 0000 0100 关LCD偏压
	#define 		LCD_DISPLAY_ON 									0x06 																				//0b1000 0000 0110 打开LCD偏压
	#define 		HT1621_EXTERNAL_OSC 						0x28 																				//0b1000 0010 1000 外部接时钟
	#define 		HT1621_INTERNAL_OSC 						0x30 																				//0b1000 0011 0000 内部时钟
	#define 		HT1621_TONE_ON 									0x12 																				//0b1000 0001 0010 打开声音输出
	#define 		HT1621_TONE_OFF 								0x10 																				//0b1000 0001 0000 关闭声音输出
	#define 		HT1621_WDT_DISABLE 							0x0A 																				//0b1000 0000 1010 禁止看门狗
	
	#define 		HT1621_CMD 											0x80  																		 	//命令标识100
	#define 		HT1621_DATA 										0xA0  																			//数据标识101
	#define 		HT1621_BIAS_AND_COM 						(LCD_CMD_BIAS_COM+LCD_BIAS_1P3+LCD_USE_COM4)//0x52 																				//0b1000 0101 0010 1/3duty 4com

	#define 		SEGMENT_DISPLAYS_1							1																						//第一个数码管
	#define 		SEGMENT_DISPLAYS_2							2																						//第二个数码管
	#define 		SEGMENT_DISPLAYS_3							3																						//第三个数码管
	#define 		SEGMENT_DISPLAYS_4							4																						//第四个数码管
	#define 		SEGMENT_DISPLAYS_5							5																						//第五个数码管
	#define 		SEGMENT_DISPLAYS_6							6																						//第六个数码管
	#define 		SEGMENT_DISPLAYS_7							7																						//第七个数码管
	#define 		SEGMENT_DISPLAYS_8							8																						//第八个数码管
	#define 		SEGMENT_DISPLAYS_9							9																						//第九个数码管
	#define			CHARACTER_BLANK									0x10																				//段码数字不显示,数码管编码的第16个编码
//----------------------------------------------------------------------------------------//
	#define 		CLRWDT()												(RSTSTAT = 0X01)														//((0<<(WDOF)) | (0<<(PORF)) | (0<<(LVRF)) | (0<<(CLRF)) | (0<<(WDTT2)) | (0<<(WDTT1)) | (1<<(WDTT0)))   // 001 1024ms wdt 溢出
	#define			TMR0_ON()												(TR0 = ON)																	//开定时器0
	#define			TMR1_ON()												(TR1 = ON)																	//开定时器1
	#define			ENABLE_TMR0_INTERRUPT()					(ET0 = ENABLE)															//定时器0中断允许
	#define			ENABLE_TMR1_INTERRUPT()					(ET1 = ENABLE)															//定时器1中断允许
	#define 		DISABLE_GLOBAL_INTERRUPT()    	(EA = 0)
	#define 		ENABLE_GLOBAL_INTERRUPT()     	(EA = 1)

//----------------------------------------------------------------------------------------//	
	#define			DOWN_KEYY_Bit										P1_1																				//减量键
	
	#define			UART_RXD_Bit										P3_0																				//
	#define			UART_TXD_Bit										P3_1																				//
	#define			POWER_KEY_Bit										P3_2																				//电源开关键兼确认键
	#define			POWER_HOLD_Bit									P3_3																				//电源开关状态保持输出，当开关机按键按下确认了输出高保持电源一直开启
	#define			HT1621_DATA_Bit									P3_4																				//数据输出至HT1621的DATA端
	#define			BACKLIGHT_Bit										P3_5																				//背光控制
	#define			UP_KEY_Bit											P3_7																				//增量键
		
	#define			ACC_POWER_Bit										P4_0																				//电锁电源输出控制，1开电锁
	#define			HT1621_CS_Bit										P4_1																				//HT1621片选端
	#define			HT1621_WR_Bit										P4_2																				//HT1621读写控制端
//----------------------------------------------------------------------------------------//	
	#define			PWMEN														0x80																				//PWM模块控制位,PWMEN位能控制PWM模块打开。
	#define			PWMCK_2_DIVISION								0x00																				//PWM时钟2分频
	#define			PWMCK_4_DIVISION								0x10																				//PWM时钟4分频
	#define			PWMCK_8_DIVISION								0x20																				//PWM时钟8分频
	#define			PWMCK_16_DIVISION								0x30																				//PWM时钟16分频
	#define			PWMSS														0x01																				//PWM0输出控制位,PWMSS位能选择P3.5端口是作为I/O端口还是PWM输出端口。
	
	#define			BLACKLIGHT_CLASS_HIGH						0x80																				//最大亮度
	#define			BLACKLIGHT_CLASS_MIDDLE					0x58																				//中等亮度
	#define			BLACKLIGHT_CLASS_LOW						0x2C																				//最低亮度
	#define			BLACKLIGHT_CLASS_STEP_VALUE			0x2C																				//每级的步进量
	
	#define			BLACKLIGHT_CLASS_FIRST					0x01																				//一级背光
	#define			BLACKLIGHT_CLASS_SECOND					0x02																				//二级背光
	#define			BLACKLIGHT_CLASS_THIRD					0x03																				//三级背光

//----------------------------------------------------------------------------------------//
//转把电压	
	#define 		AD_BIT_AMP									 				205 																		//1024/5=205
	#define 		HANDLE_BAR_START_VOL								1.3																			//1.3V
	#define 		HANDLE_BAR_LIM_VOL									3.8																			//3.8V
	#define 		HANDLE_BAR_PROTECT_VOL_MAX 					4.5																			//4.5V
	#define 		HANDLE_BAR_PROTECT_VOL_MIN					0.4 																		//0.4V
	#define 		HAND_CRUISE_OFF_VOL									2.2																			//巡航转把解除的电压
	#define 		DYNAMIC_HANDLE_BAR_THRESHOLD				160 																		//动态转把阀值，不合适可根据实际情况调整
	#define			POWER_ON_CHECK_HANDLE_BAR_COUNT			5																				//上电转把检测次数，最少不能小于2
	
	#define			HANDLE_BAR_START_LIM_V							(unsigned int)(HANDLE_BAR_START_VOL*AD_BIT_AMP+0.5)				//转把启动电压AD值//267
	#define			HANDLE_BAR_WORK_LIM_V								(unsigned int)(HANDLE_BAR_LIM_VOL*AD_BIT_AMP+0.5)					//转把有效的最高电压AD值//779
	#define			HANDLE_BAR_OVERFLOW_LIM_V						(unsigned int)(HANDLE_BAR_PROTECT_VOL_MAX*AD_BIT_AMP+0.5)	//最高转把保护电压AD值//923
	#define			HANDLE_BAR_LOW_LIM_V								(unsigned int)(HANDLE_BAR_PROTECT_VOL_MIN*AD_BIT_AMP+0.5)	//最低转把保护电压AD值//82
	#define  		HAND_CRUISE_OFF_LIM_V            		(unsigned int)(HAND_CRUISE_OFF_VOL*AD_BIT_AMP+0.5) 				//转把电压由归零电压上升到2.2V时关闭巡航值 
	
	#define			HANDLE_VOL_TO_100_DUTY_BASE					(unsigned char)((HANDLE_BAR_WORK_LIM_V-HANDLE_BAR_START_LIM_V)/100+0.5)						//转把电压转换成100%PWM的基准值，最高档位
	#define			HANDLE_VOL_TO_70_DUTY_BASE					(unsigned char)((HANDLE_BAR_WORK_LIM_V-HANDLE_BAR_START_LIM_V)/70+0.5)						//转把电压转换成70%PWM的基准值，中档位
	#define			HANDLE_VOL_TO_40_DUTY_BASE					(unsigned char)((HANDLE_BAR_WORK_LIM_V-HANDLE_BAR_START_LIM_V)/40+0.5)						//转把电压转换成40%PWM的基准值，低档位
	#define			HIGH_GEAR_PWM_DUTY									1000																		//高档PWM百分比，100%PWM ,由于最小分辨率为0.1，所以值扩大10倍
	#define			MIDDLE_GEAR_PWM_DUTY								700																			//中档PWM百分比，70%PWM ,由于最小分辨率为0.1，所以值扩大10倍
	#define			LOW_GEAR_PWM_DUTY										400																			//低档PWM百分比，40%PWM ,由于最小分辨率为0.1，所以值扩大10倍
//----------------------------------------------------------------------------------------//
//额定电压	
	#define			POWER_VOLTAGE_TYPE							3																						//三种规格的电池电压
	#define			BATTERY_VOL_24V									1																						//定义电池为24V电压		
	#define			BATTERY_VOL_36V									2																						//定义电池为36V电压			
	#define			BATTERY_VOL_48V									3																						//定义电池为48V电压	

	#define			RATED_VOLTAGE_24V								0x18																				//额定电压24V	
	#define			RATED_VOLTAGE_36V								0x24																				//额定电压36V	
	#define			RATED_VOLTAGE_48V								0x30																				//额定电压48V	
	#define			RATED_VOLTAGE_60V								0x3C																				//额定电压60V	
	#define			RATED_VOLTAGE_64V								0x40																				//额定电压64V		
//----------------------------------------------------------------------------------------//
//额定电压欠压值	
//欠压值要比实际的扩大10倍
//单格电池放电终止电压为1.708V，12V的电池组放电终止电压为1.708*6=	10.248V，约等于10.25V
	#define			LOW_VOL_RATED_VOLTAGE_24V				0x0D2																				//额定电压24V下的欠压值21V	
	#define			LOW_VOL_RATED_VOLTAGE_36V				0x136																				//额定电压36V下的欠压值31V	
	#define			LOW_VOL_RATED_VOLTAGE_48V				0x19A																				//额定电压48V下的欠压值41V	
	#define			LOW_VOL_RATED_VOLTAGE_60V				0x1FE																				//额定电压60V下的欠压值51V	
	#define			LOW_VOL_RATED_VOLTAGE_64V				0x221																				//额定电压64V下的欠压值54.5V
	
	#define			BATTERY_CELL_NUMBER							6																						//电池显示的格数
	#define			VOLTAGE_CELL_VALUE_24V					(unsigned char)((((RATED_VOLTAGE_24V*10)-LOW_VOL_RATED_VOLTAGE_24V))/BATTERY_CELL_NUMBER+0.5)	//24V电池每格电压值
	#define			VOLTAGE_CELL_VALUE_36V					(unsigned char)((((RATED_VOLTAGE_36V*10)-LOW_VOL_RATED_VOLTAGE_36V))/BATTERY_CELL_NUMBER+0.5)	//24V电池每格电压值
	#define			VOLTAGE_CELL_VALUE_48V					(unsigned char)((((RATED_VOLTAGE_48V*10)-LOW_VOL_RATED_VOLTAGE_48V))/BATTERY_CELL_NUMBER+0.5)	//24V电池每格电压值
	#define			VOLTAGE_CELL_VALUE_60V					(unsigned char)((((RATED_VOLTAGE_60V*10)-LOW_VOL_RATED_VOLTAGE_60V))/BATTERY_CELL_NUMBER+0.5)	//24V电池每格电压值
	#define			VOLTAGE_CELL_VALUE_64V					(unsigned char)((((RATED_VOLTAGE_64V*10)-LOW_VOL_RATED_VOLTAGE_64V))/BATTERY_CELL_NUMBER+0.5)	//24V电池每格电压值	
//----------------------------------------------------------------------------------------//	
	#define 		ADDR_EXCURSION_ODO  						0x0000																			//总里程地址
	#define			ADDR_VOLTAGE_OFFSET							0x0100																			//电压偏移量地址
	#define			ADDR_BLACKLIGHT_CLASS						(ADDR_VOLTAGE_OFFSET+1)											//背光亮度地址
	#define			ADDR_MILEAGE_UNIT								(ADDR_BLACKLIGHT_CLASS+1)										//里程单位地址
	#define			ADDR_BATTERY_VOL_CLASS					(ADDR_MILEAGE_UNIT+1)												//电池电压地址
	#define			ADDR_SLEEP_TIME									(ADDR_BATTERY_VOL_CLASS+1)									//电池电压地址
	
	#define 		ADDR_EXCURSION_PARAMETER 				0x0120    																	//设置参数保存的地址
	
	#define			SAVE_ADDR_OFFSET								0x03																				//前3个字节为固定在所有不要保存
	#define			SAVE_ADDR_OFFSET_END						248																					//EEPROM一页保存62次，每次使用4个字节，62*4=248
	//#define			LOW_VOL_VALUE_HIGH_BYTE					0x0E																				//发送字节的第十四和十五个字节是保存欠压值的,14字节放欠压值高字节
/*****************************************************************************************/	
//调整菜单索引值
	#define			BLACKLIGHT_SET_INDEX							0x01																			//背光调整索引值
	#define			MILEAGE_UNIT_SET_INDEX						0x02																			//里程单位调整索引值
	#define			POWER_VOLTAGE_SET_INDEX						0x03																			//电压调整索引值
	#define			SLEEP_TIME_SET_INDEX							0x04																			//休眠时间调整索引值
	#define			ASISST_GEAR_SET_INDEX							0x05																			//助力档位调整索引值
	#define			WHEEL_DIAMETER_SET_INDEX					0x06																			//轮径调整索引值
	#define			SPEED_MEASURE_MAGNET_SET_INDEX		0x07																			//测速磁钢数调整索引值
	#define			LIMIT_SPEED_SET_INDEX							0x08																			//限速值调整索引值
	#define			RUN_TYPE_SET_INDEX								0x09																			//启动方式调整索引值
	#define			DRIVE_TYPE_SET_INDEX							0x0A																			//驱动方式设定调整索引值
	#define			ASSIST_SENSITIVITY_SET_INDEX			0x0B																			//助力灵敏度设置调整索引值
	#define			ASSIST_CLASS_SET_INDEX						0x0C																			//助力启动强度调整索引值
	#define			ASSIST_PULSE_SET_INDEX						0x0D																			//助力磁钢盘类型设定调整索引值
	#define			CURRENT_SET_INDEX									0x0E																			//控制器限流值设定调整索引值
	#define			LOW_VOL_SET_INDEX									0x0F																			//控制器欠压值设定调整索引值
	#define			ODO_RESET_SET_INDEX								0x10																			//ODO清零设置设定调整索引值,长按上键5秒钟ODO清零

//----------------------------------------------------------------------------------------//
//轮径
	#define			MIN_WHEEL_DIAMETER_VALUE					0x0032																		//最小轮径为5英寸，定点显示值要扩大10，因此寄存器值为50
	#define			MAX_WHEEL_DIAMETER_VALUE					0x01F4																		//最大轮径为50英寸，定点显示值要扩大10，因此寄存器值为500
	#define			DEFAULT_WHEEL_DIAMETER						0x0078																		//默认轮径为12英寸，定点显示值要扩大10，因此寄存器值为120
	
//----------------------------------------------------------------------------------------//
//测速磁钢数
	#define			MIN_MAGENT_NUMBER									0x01																			//最小测速磁钢数,1
	#define			MAX_MAGENT_NUMBER									0xFA																			//最大测速磁钢数,250
	#define			DEFAULT_MAGENT_NUMBER							0x14																			//默认测速磁钢数,20
	
//----------------------------------------------------------------------------------------//
//限速范围值
	#define			MIN_LIMIT_SPEED										0x00																			//最小限速值,0
	#define			MAX_LIMIT_SPEED										0x64																			//最大限速值,100
	#define			DEFAULT_LIMIT_SPEED								0x14																			//默认限速值,20
	
//----------------------------------------------------------------------------------------//
//助力灵敏度范围值
	#define			MIN_ASSIST_SENSITIVITY						0x01																			//最小助力灵敏度值,1
	#define			MAX_ASSIST_SENSITIVITY						0x18																			//最大助力灵敏度值,24
	#define			DEFAULT_ASSIST_SENSITIVITY				0x05																			//默认助力灵敏度值,5	
	
//----------------------------------------------------------------------------------------//
//助力启动强度范围值
	#define			MIN_ASSIST_START_CLASS						0x00																			//最小助力强度值,0
	#define			MAX_ASSIST_START_CLASS						0x05																			//最大助力强度值,5
	#define			DEFAULT_ASSIST_START_CLASS				0x02																			//默认助力强度值,2	
	
//----------------------------------------------------------------------------------------//
//助力磁盘选择
	#define			ASSIST_MAGNET_5_UNIT							0x05																			//5磁钢磁盘
	#define			ASSIST_MAGNET_8_UNIT							0x08																			//8磁钢磁盘
	#define			ASSIST_MAGNET_12_UNIT							0x0C																			//12磁钢磁盘	

//----------------------------------------------------------------------------------------//
//工作电流范围值
	#define			MIN_WORK_CURRENT									0x01																			//最小电流,1
	#define			MAX_WORK_CURRENT									0x14																			//最大电流值,20
	#define			DEFAULT_WORK_CURRENT							0x0C																			//默认电流值,12
	
//----------------------------------------------------------------------------------------//
//ADC
	#define			ADON															(ADCON|=0x80)															//ADC模块使能
	#define			ADCIF															(ADCON&(1<<6))														//转换完成中断标志位，需要软件清零
	#define 		CLR_ADCIF() 	    								(ADCON&=~(1<<6)) 													//软件清零转换完成中断标志位
	#define 		START_AD()												(ADCON|=0x01) 														//开AD转换
	#define 		ENABLE_ADC_INTERRUPT()	      		(IEN0|=(1<<6))														//允许Ad中断
	#define 		DISABLE_ADC_INTERRUPT()						(IEN0&=~(1<<6))														//禁止Ad中断
	#define			ADC_HANDELBAR											0x00																			//
	#define			ADC_ACC_VOLTAGE										0x0C																			//
  #define			ADC_POWER_VOLTAGE									0x0E																			//
  #define			SAMPLE_HANDELBAR()								(ADCON=(ADCON&0xF1))											//转把为通道0
	#define			SAMPLE_ACC_VOLTAGE()							(ADCON=((ADCON&0xF1)|ADC_ACC_VOLTAGE))		//转把为通道6
	#define			SAMPLE_POWER_VOLTAGE()						(ADCON=((ADCON&0xF1)|ADC_POWER_VOLTAGE))	//转把为通道7
	
//--------------------------------------------------------------------------------------//
//理论值每伏电压约等于个AD值  
//
	#define			BATTERY_VOLTAGE_V									36.0																			//电池额定电压		
	#define 		BATTERY_LOW_VOLTAGE_V					  	31.0																			//欠压值
	#define			BATTERY_LOW_VOL_SEND_VALUE				(unsigned int)(BATTERY_LOW_VOLTAGE_V*10)	//发送给控制器的欠压值，采用定点数，所有乘10保留小数点后一位
	
	
	#define 		DIVISION_RATIO							 			20.6																			//电压采样衰减倍率 （上分压电阻+下分压电阻）/下分压电阻=衰减倍率	
	#define			VOLTAGE_DIVISION_RATIO			 			(1024/5/DIVISION_RATIO)										//电压衰减后的AD值//9.94
	#define 		VOLTAGE_OFFSET_CENTER_POINT       127																				//电压偏移量中点值
	#define			VOLTAGE_OFFSET_STEP								1																					//电压偏移量步进值，相当于每步增减0.1V
	#define			VOLTAGE_PORTION			 							(unsigned int)((5*DIVISION_RATIO/1024)*10+0.5)	//一个AD值等于实际得电压值，乘10是保留小数点后一位值
	#define 		BATTERY_LOW_LIM_V			 						(unsigned int)(BATTERY_LOW_VOLTAGE_V*VOLTAGE_DIVISION_RATIO+0.5)		//((预设欠压值-电压偏差)/衰减倍率/5V参考电压)*AD满量程值4096(12位AD)+0.5(这个值是为了四舍五入))
	#define			WORK_VOL_RATIO										((BATTERY_VOLTAGE_V-BATTERY_LOW_VOLTAGE_V)*VOLTAGE_DIVISION_RATIO+0.5)	//满电到欠压的电压区间值
	#define			MIN_CELL_VOLTAGE									(WORK_VOL_RATIO/BATTERY_CELL_NUMBER)			//每格的最小电压值
	
	#define			VOLTAGE_CELL_0										0x00																			//0格电量指示
	#define			VOLTAGE_CELL_1										0x01																			//1格电量指示
	#define			VOLTAGE_CELL_2										0x02																			//2格电量指示
	#define			VOLTAGE_CELL_3										0x03																			//3格电量指示
	#define			VOLTAGE_CELL_4										0x04																			//4格电量指示
	#define			VOLTAGE_CELL_5										0x05																			//5格电量指示
	#define			VOLTAGE_CELL_6										0x06																			//6格电量指示
	
	
/*****************************************************************************************/	
//Uart
	#define 		CONNECT_TIME_OVER 								5																					//连接超时时间500mS
	#define			UART_FRAME_SEND_TIME							250																				//帧与帧之间的分割时间
	#define			ENABLE_UART_INTERRUPT()						ES0 = 1																		//开Uart中断
	#define 		DISABLE_RECEIVE()       					REN = 0																		//关闭接收
	#define 		ENABLE_RECEIVE()       						REN = 1																		//允许接收
	#define 		TEST_RECEIVE_FLAG	  	 						RI
	#define 		CLR_RECEIVE_FLAG()	   						RI = 0																		//清UART运行接收标志，该位清零才会允许接受数据，硬件置位
	
	#define 		BIT0 															(1<<0)
	#define 		BIT1 															(1<<1)
	#define 		BIT2 															(1<<2)
	#define 		BIT3 															(1<<3)
	#define 		BIT4 															(1<<4)
	#define 		BIT5 															(1<<5)
	#define 		BIT6 															(1<<6)
	#define 		BIT7 															(1<<7)

	#define 		ID_HELP_DRIVE         						0x00																			//助力驱动(通过助力档位决定输出多少助力，此时转把无效)。
	#define 		ID_MOTOR_DRIVE			         			0x01																			//电驱动(通过转把驱动, 此时助力档位无效)。
	#define 		ID_HELP_AND_MOTOR_DRIVE         	0x02																			//助力驱动和电驱动同时共存(电驱动零启动状态下无效)。
	
	#define 		ID_HELP_LEVEL_1         					0x01																			//助力档位等级
	#define 		ID_HELP_LEVEL_3             			0x03																			//助力档位等级
	#define 		ID_HELP_LEVEL_5                 	0x05																			//助力档位等级
	#define 		ID_HELP_LEVEL_6                 	0x06																			//助力档位等级
	#define 		ID_HELP_LEVEL_7                 	0x07																			//助力档位等级
	#define 		ID_HELP_LEVEL_9                 	0x09																			//助力档位等级
	#define 		ID_HELP_LEVEL_10                 	0x0A																			//助力档位等级
	#define 		ID_HELP_LEVEL_11                 	0x0B																			//助力档位等级
	#define 		ID_HELP_LEVEL_12                 	0x0C																			//助力档位等级
	#define 		ID_HELP_LEVEL_13                 	0x0D																			//助力档位等级
	#define 		ID_HELP_LEVEL_14                 	0x0E																			//助力档位等级
	#define 		ID_HELP_LEVEL_15                 	0x0F																			//助力档位等级
	
	#define 		ID_HELP_PLUS_5                 		0x05																			//助力盘磁钢5个
	#define 		ID_HELP_PLUS_8                 		0x08																			//助力盘磁钢8个
	#define 		ID_HELP_PLUS_12                 	0x0C																			//助力盘磁钢12个

	
	//  uart 控制寄存器
	//------------------------------------------------------------------------------
	//UART工作方式
	#define     UART_MODE0_SYCH8        					0   																			//帧长度8 bits ,波特率fSYS/（4或12）
	#define     UART_MODE1_ANSYCH10     					1   																			//帧长度10 bits,自带波特率发生器的溢出率/16
	#define     UART_MODE2_ANSYCH11     					2   																			//帧长度11 bits,波特率fSYS/（32或64）
	#define     UART_MODE3_ANSYCH11     					3   																			//帧长度11 bits,自带波特率发生器的溢出率/16
	#define     UART_MODE     										1																					//EUART工作方式,共有4种，当前使用方式3
	#if (UART_MODE==1)
		#define		SM0_AND_SM1												0X40																			//
	#elif (UART_MODE==2)
		#define		SM0_AND_SM1												0X80																			//
	#elif (UART_MODE==3)
		#define		SM0_AND_SM1												0XC0																			//
	#else
		#define		SM0_AND_SM1												0X00																			//
	#endif 
	
	
	#define			SYS_CLK														16600000																	//时钟频率16.6M
	#define     UART_BAUD_RATE       							9600																			//波特率
	#define     UART_SM0      										0x00//0x80																//串行方式控制位0，SSTAT = 0
	#define     UART_SM1      										0x40																			//串行方式控制位1，SSTAT = 0
	#define			UART_SMOD													0X00//0X80																//波特率倍频控制位（PCON.7）
	#if (UART_SMOD)																																					//计算波特率是否倍频
		#define		UART_SMOD_VALUE										1
	#else
		#define		UART_SMOD_VALUE										0
	#endif
	/****************************************************************************************
	EUART多处理机通讯允许位（第9位“1”校验器），SSTAT = 0
	0：在方式0下，波特率是系统时钟的1/12
	在方式1下，禁止停止位确认检验，任何停止位都会置位RI
	在方式2和3下，任何字节都会置位RI
	1：在方式0下，波特率是系统时钟的1/4
	在方式1下，允许停止位确认检验，只有有效的停止位（1）才能置位RI
	在方式2和3下，只有地址字节（第9位= 1）才能置位RI
	*****************************************************************************************/
	#define     UART_SM2      										0x20																			//多处理机通讯允许位

	#define     UART_RB_EN     										0x10																			//允许接收

	//波特率
	//BaudRate=((SMOD+1)/32)*(fT1/(256-TH1))
	//SMOD为EUART的波特率二倍频器（PCON.7）,T1CLK是定时器1的时钟源,TH1是定时器1的8位自动重载寄存器
	//宏定义要注意必须除波特率值在除32，不能波特率和32先乘再除时钟频率，那样计算结果是错误的！！！
	#define			TIMER1_INIT_VALUE									(unsigned char)(256-(SYS_CLK*(UART_SMOD_VALUE+1)/UART_BAUD_RATE)/32+0.5)//定时器1初值
	/*
	 * 98H         b7     b6       b5        b4  b3  b2  b1 b0
	 * SCON        SM0/FE SM1/RXOV SM2/TXCOL REN TB8 RB8 TI RI
	 * POR/WDT/LVR 0      0        0         0   0   0   0  0
	 */
	#define     SCON_INIT       									(UART_SM0|UART_SM1|UART_RB_EN)


//------------------------------------------------------------------------------

#endif

/**********************SINOWEALTH_SH79F083A**********END OF FILE*************************/
